home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / gepackte_disketten / 1993 / 04_93_2.dms / 04_93_2.adf / AA-Programmierung / HAM8.asm next >
Assembly Source File  |  1993-02-17  |  7KB  |  370 lines

  1.  
  2.     ***************************************************
  3.     *        HAM8 Beispielprogramm (10.2.1993)        *
  4.     *     von Alexander Kochann und Oliver Reiff      *
  5.     *         laden mit DevPacII           *
  6.     *               tabulator size: 11          *
  7.     ***************************************************
  8.  
  9. Red        equ    %10000000
  10. Green        equ    %11000000
  11. Blue        equ    %01000000
  12.  
  13. FALSE        equ    0
  14. TRUE        equ    1
  15. TAG_DONE        equ    0
  16.  
  17. CloseScreen    equ    -66
  18. CloseWindow    equ    -72
  19. InitRastPort    equ    -198
  20. Wait        equ    -318
  21. GetMsg        equ    -372
  22. InitBitMap        equ    -390
  23. CloseLibrary    equ    -414
  24. OpenLibrary    equ    -552
  25. OpenWindowTagList    equ    -606
  26. OpenScreenTagList    equ    -612
  27. NewObjectA        equ    -636
  28. DisposeObject    equ    -642
  29. WritePixelArray8    equ    -786
  30. SetWindowPointerA    equ    -816
  31. LoadRGB32        equ    -882
  32. AllocBitMap    equ    -918
  33. FreeBitMap        equ    -924
  34.  
  35. wd_RPort        equ    50
  36. wd_UserPort    equ    86
  37. im_Class        equ    20
  38. rp_SIZEOF        equ    100
  39. bm_SIZEOF        equ    40
  40. sc_ViewPort    equ    44
  41. sc_RastPort    equ    84
  42. gb_ChipRevBits0    equ    236
  43.  
  44. SA_Colors        equ    $80000029
  45. SA_DisplayID    equ    $80000032
  46. SA_Pens        equ    $8000003a
  47. SA_Parent        equ    $8000003d
  48. SA_Draggable    equ    $8000003e
  49. SA_Interleaved    equ    $80000042
  50. WA_NewLookMenus    equ    $80000093
  51. WA_Pointer        equ    $80000097
  52. WA_BusyPointer    equ    $80000098
  53. WA_PointerDelay    equ    $80000099
  54. POINTERA_BitMap    equ    $80039001
  55. POINTERA_XOffset    equ    $80039002
  56. POINTERA_YOffset    equ    $80039003
  57. POINTERA_WordWidth    equ    $80039004
  58. POINTERA_XResolution    equ    $80039005
  59. POINTERA_YResolution    equ    $80039006
  60.  
  61. *--------------------------------
  62.  
  63. PrgStart    opt    o+
  64.     move.l    4.w,a6
  65.     lea    GfxName,a1
  66.     moveq    #39,d0
  67.     jsr    OpenLibrary(a6)
  68.     lea    GfxBase,a0
  69.     move.l    d0,(a0)
  70.     beq    WrongKick
  71.     lea    IntName,a1
  72.     moveq    #39,d0
  73.     jsr    OpenLibrary(a6)
  74.     lea    IntBase,a0
  75.     move.l    d0,(a0)
  76.  
  77.     move.l    GfxBase,a6
  78.     move.b    gb_ChipRevBits0(a6),d0
  79.     and.b    #$f,d0        * AA-Chipset vorhanden
  80.     cmp.b    #$f,d0        * und aktiviert ?
  81.     bne    NoScreen
  82.  
  83.     move.l    IntBase,a6
  84.     lea    ScreenData_1,a0
  85.     lea    ScreenTags_1,a1
  86.     jsr    OpenScreenTagList(a6)
  87.     lea    Screen_1,a0
  88.     move.l    d0,(a0)
  89.     beq    NoScreen
  90.  
  91.     lea    WindowData_1,a0
  92.     lea    WindowTags_1,a1
  93.     jsr    OpenWindowTagList(a6)
  94.     lea    Window_1,a0
  95.     move.l    d0,(a0)
  96.  
  97.     lea    ScreenData_2,a0
  98.     lea    ScreenTags_2,a1
  99.     move.l    Screen_1,4(a1)
  100.     jsr    OpenScreenTagList(a6)
  101.     lea    Screen_2,a0
  102.     move.l    d0,(a0)
  103.  
  104.     move.l    GfxBase,a6
  105.     move.w    #640,d0
  106.     moveq    #2,d1
  107.     moveq    #8,d2
  108.     moveq    #0,d3
  109.     sub.l    a0,a0
  110.     jsr    AllocBitMap(a6)
  111.     lea    TempBM,a0
  112.     move.l    d0,(a0)
  113.     beq    NoBitMap
  114.  
  115.     lea    TempRP,a1
  116.     jsr    InitRastPort(a6)
  117.  
  118.     lea    TempRP,a1
  119.     move.l    TempBM,4(a1)
  120.  
  121.     bsr    DrawGrey
  122.     bsr    DrawColors
  123.  
  124.     lea    PointerBM,a0
  125.     moveq    #2,d0
  126.     moveq    #16,d1
  127.     moveq    #16,d2
  128.     jsr    InitBitMap(a6)
  129.     lea    PointerBM,a1
  130.     lea    PointerPlane0,a0
  131.     move.l    a0,8(a1)        * Erste BitPlane
  132.     lea    PointerPlane1,a0
  133.     move.l    a0,12(a1)        * Zweite BitPlane
  134.  
  135.     lea    SpriteTags,a2
  136.     move.l    a1,4(a2)
  137.     lea    PointerClass,a1
  138.     sub.l    a0,a0
  139.     move.l    IntBase,a6
  140.     jsr    NewObjectA(a6)
  141.     lea    ExtSprite,a0
  142.     move.l    d0,(a0)
  143.  
  144.     move.l    Window_1,a0
  145.     lea    PointerTags,a1
  146.     move.l    ExtSprite,4(a1)
  147.     move.l    IntBase,a6
  148.     jsr    SetWindowPointerA(a6)
  149.  
  150. *---------------------
  151.  
  152. MainLoop    move.l    4.w,a6
  153.     moveq    #-1,d0
  154.     jsr    Wait(a6)
  155.  
  156.     move.l    Window_1,a0
  157.     move.l    wd_UserPort(a0),a0
  158.     jsr    GetMsg(a6)
  159.     tst.l    d0
  160.     beq.s    MainLoop
  161.     move.l    d0,a0
  162.     move.l    im_Class(a0),d0
  163.     cmp.l    #$200,d0        * CloseWindow
  164.     bne.s    MainLoop
  165.  
  166. *---------------------
  167.  
  168. Ende    move.l    GfxBase,a6
  169.     move.l    TempBM,a0
  170.     jsr    FreeBitMap(a6)
  171. NoBitMap    move.l    IntBase,a6
  172.     move.l    Window_1,a0
  173.     jsr    CloseWindow(a6)
  174.     move.l    Screen_2,a0
  175.     jsr    CloseScreen(a6)
  176.     move.l    Screen_1,a0
  177.     jsr    CloseScreen(a6)
  178.     move.l    ExtSprite,a0
  179.     jsr    DisposeObject(a6)
  180. NoScreen    move.l    4.w,a6
  181.     move.l    IntBase,a1
  182.     jsr    CloseLibrary(a6)
  183.     move.l    GfxBase,a1
  184.     jmp    CloseLibrary(a6)
  185. *----------
  186. WrongKick    moveq    #20,d0
  187.     rts
  188.  
  189. *---------------------
  190.  
  191. DrawGrey    lea    Grey,a0
  192.     move.w    #255,d0
  193.     move.w    #256,(a0)+        * 256 Einträge
  194.     clr.w    (a0)+        * Mit Color0 starten
  195.     moveq    #0,d2
  196. .Loop_1    moveq    #11,d1
  197. .Loop_2    move.b    d2,(a0)+
  198.     dbra    d1,.Loop_2
  199.     addq.w    #1,d2
  200.     dbra    d0,.Loop_1
  201.  
  202.     move.l    Screen_2,a0
  203.     lea    sc_ViewPort(a0),a0
  204.     lea    Grey,a1
  205.     move.l    gfxbase,a6
  206.     jsr    LoadRGB32(a6)
  207.  
  208.     lea    Pixels,a4
  209.     moveq    #19,d0
  210. .Loop_3    move.w    #255,d1
  211. .Loop_4    move.b    d1,(a4)+
  212.     dbra    d1,.Loop_4
  213.     dbra    d0,.Loop_3
  214.  
  215.     lea    TempRP,a1
  216.     lea    Pixels,a2
  217.     move.l    Screen_2,a0
  218.     lea    sc_RastPort(a0),a0
  219.     moveq    #32,d0
  220.     moveq    #0,d1
  221.     move.w    #287,d2
  222.     move.w    #20,d3
  223.     jmp    WritePixelArray8(a6)
  224.  
  225. *---------------------
  226.  
  227. DrawColors    lea    Pixels,a4
  228.     move.w    #Blue,d0
  229.     move.w    #Red,d1
  230.     move.w    #Green,d2
  231.     bsr.s    DrawCBox
  232.     move.w    #Green,d0
  233.     move.w    #Blue,d1
  234.     move.w    #Red,d2
  235.     bsr.s    DrawCBox
  236.  
  237.     lea    TempRP,a1
  238.     lea    Pixels,a2
  239.     move.l    Window_1,a0
  240.     move.l    wd_RPort(a0),a0
  241.     moveq    #0,d0
  242.     moveq    #0,d1
  243.     move.w    #255,d2
  244.     move.w    #193,d3
  245.     jmp    WritePixelArray8(a6)
  246.  
  247. *---------------------
  248.  
  249. DrawCBox    move.w    #63,d7
  250. .Loop    moveq    #63,d4
  251.     sub.w    d7,d4
  252.     and.w    #%00111111,d4
  253.     or.w    d0,d4
  254.     move.b    d4,(a4)+
  255.     move.w    d1,d4
  256.     bsr.s    DrawLine
  257.     move.w    d2,d4
  258.     bsr.s    DrawLine
  259.     move.w    d1,d4
  260.     or.w    #%111111,d4
  261.     bsr.s    DrawLine
  262.     move.w    d2,d4
  263.     or.w    #%111111,d4
  264.     bsr.s    DrawLine
  265.     subq.l    #1,a4
  266.     dbra    d7,.loop
  267.     rts
  268. *----------
  269. DrawLine    movem.l    d0-d4,-(sp)
  270.     move.w    #63,d6
  271.     moveq    #1,d1
  272.     move.w    d4,d0
  273.     and.w    #%00111111,d0
  274.     beq.s    .Loop
  275.     moveq    #-1,d1
  276. .Loop    move.b    d4,(a4)+
  277.     add.w    d1,d4
  278.     dbra    d6,.loop
  279.     movem.l    (sp)+,d0-d4
  280.     rts
  281.  
  282. *-------------------------------------------
  283. *-------------------------------------------
  284.  
  285. IntBase    dc.l    0
  286. GfxBase    dc.l    0
  287. Window_1    dc.l    0
  288. Screen_2    dc.l    0
  289. TempBM    dc.l    0
  290. ExtSprite    dc.l    0
  291.  
  292. ScreenData_1
  293.     dc.w    0,0,640,170,8,1,0,$f
  294.     dc.l    Topaz8,ScreenName,0,0
  295. ScreenData_2
  296.     dc.w    0,180,320,21,8,1,0,$11f
  297.     dc.l    Topaz8,0,0,0
  298.  
  299. WindowData_1
  300.     dc.w    188,20,264,141,1
  301.     dc.l    $200,$3140e,0,0,WindowName
  302. Screen_1    dc.l    0,0
  303.     dc.w    50,50,320,200,15
  304.  
  305. WindowTags_1
  306.     dc.l    WA_BusyPointer,TRUE
  307.     dc.l    TAG_DONE
  308. ScreenTags_1
  309.     dc.l    SA_Pens,PenArray
  310.     dc.l    SA_DisplayID,$29800
  311.     dc.l    SA_Colors,ColorSpec
  312.     dc.l    SA_Interleaved,TRUE
  313.     dc.l    TAG_DONE
  314. ScreenTags_2
  315.     dc.l    SA_Parent,0
  316.     dc.l    SA_DisplayID,$21000
  317.     dc.l    SA_Colors,ColorSpec
  318.     dc.l    SA_Draggable,FALSE
  319.     dc.l    TAG_DONE
  320. PointerTags
  321.     dc.l    WA_Pointer,0
  322.     dc.l    WA_PointerDelay,TRUE
  323.     dc.l    TAG_DONE
  324. SpriteTags
  325.     dc.l    POINTERA_BitMap,0
  326.     dc.l    POINTERA_XOffset,-6
  327.     dc.l    POINTERA_WordWidth,4
  328.     dc.l    POINTERA_XResolution,4
  329.     dc.l    POINTERA_YResolution,2
  330.     dc.l    TAG_DONE
  331.  
  332. ColorSpec    dc.w    0,$99,$99,$99
  333.     dc.w    1,$00,$00,$00
  334.     dc.w    2,$ff,$ff,$ff
  335.     dc.w    3,$44,$66,$bb
  336.     dc.w    4,$f0,$e8,$00
  337.     dc.w    17,$ee,$00,$00
  338.     dc.w    18,$00,$00,$00
  339.     dc.w    19,$ee,$dd,$cc
  340.     dc.w    -1
  341.  
  342. PenArray    dc.w    0,0,1,2,1,3,4,0,2,1,2,1,-1
  343.  
  344. Topaz8    dc.l    FontName
  345.     dc.w    8,0
  346.  
  347. PointerClass
  348.     dc.b    'pointerclass',0
  349. IntName    dc.b    'intuition.library',0
  350. GfxName    dc.b    'graphics.library',0
  351. FontName    dc.b    'topaz.font',0
  352. ScreenName    dc.b    'Hires-HAM8 Screen',0
  353. WindowName    dc.b    'Farbverlauf',0
  354.  
  355.     SECTION    'Buffers',BSS_C
  356. PointerBM    ds.b    bm_SIZEOF
  357. TempRP    ds.b    rp_SIZEOF
  358. Pixels    ds.b    400*210
  359. Grey    ds.b    256*12+4
  360.  
  361.     SECTION    'Sprite Data',DATA_C
  362. PointerPlane0
  363.     dc.w    $0180,$0180,$0180,$0ff0,$3ffc,$7ffe,$ffff,$ffff
  364.     dc.w    $ffff,$ffff,$ffff,$ffff,$7ffe,$7ffe,$3ffc,$0ff0
  365. PointerPlane1
  366.     dc.w    $0c60,$3e70,$6018,$0000,$0000,$0660,$0440,$0000
  367.     dc.w    $0000,$0000,$0000,$0ef0,$07e0,$0340,$0000,$0000
  368.  
  369.  
  370.